iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

今日內容:OOP、Constructor、Overloaded Constructor、物件陣列、static


OOP(Object Oriented Programming)

物件導向程式設計,也是Java的精隨
Objects = Attributes(儲存資料) + methods(提供功能)

在同一個src資料夾裡面可以宣告多個不同的java class
然後就可以直接在main裡面宣告物件了 (與C++不同,不需額外import)
宣告方式與scanner, random一樣
如果要讀取物件的特定值,需要用 . (dot operator) 進行存取

下面舉例如何創建一個class,以汽車為例

public class Car{
    String make = "Ford";
    String model = "Mustang";
    int year = 2025;
    double price = 54999.99;
    boolean isRunning = false;
    // 以上這些是Car這個Class的屬性(Attributes),儲存在每一個被宣告出來的Car物件(Object)內
    
    void start(){
        isRunning = true;
        System.out.println("You start the engine");
    }
    void stop(){
        isRunning = false;
        System.out.println("You stop the engine");
    }
    // 而這些則是Car這個class的功能(methods),也是每個Car物件都可以獨立使用的
}

回到Main的main函式中進行宣告

public class Main{
    public static void main(String[] args){
        Car car1 = new Car();
        Car car2 = new Car();
        
        System.out.println(car1.isRunning); // 可以直接用 . 進行public attributes的存取,此時為false
        car1.start(); // 物件.method 可以呼叫該物件的成員函式
        System.out.println(car1.isRunning); // 經由start(),isRunning改為true
        // ...
    }
}

以上是最基礎的class用法舉例


Constructor

屬於method的一種,用於傳入參數使物件初始化
每一個物件在被建立之前,系統會先尋找這個class的constructor,對其進行初始化
而constructor的宣告方式為 class名稱 加上 (參數) 就好

以Student為Class進行舉例

public class Student{
    String name;
    int age;
    double gpa;
    boolean isEnrolled;
    // 每位學生都有以上的Attributes,用來儲存資料
    
    // 以下就是Student這個class的constructor,有著name, age, gpa三個屬性
    // 在main函式中宣告Student物件時,需要傳入這三個參數才能正確初始化物件
    Student(String name, int age, double gpa){ 
        this.name = name; // 使用this關鍵字來指定修改物件內容,避免重名造成的影響,也更直觀
        this.age = age;
        this.gpa = gpa;
        this.isEnrolled = true;
    }
}

則在main函式中

public class Main{
    public static void main(String[] args){
        Student student = new Student("Amy", 22, 4.0); // 正確宣告方式
        Student student = new Student(); // 錯誤宣告方式,物件無法被正確初始化
    }
}

Overloaded Constructor

一個class可以同時有多個Constructor,根據傳入的參數不同,系統會自動尋找適配的constructor進行物件初始化,做法一樣是 物件名稱 + (參數)
同樣以上面的Student為例

public class Student{
    String name;
    int age;
    double gpa;
    boolean isEnrolled;

    Student(String name, int age, double gpa){ 
        this.name = name;
        this.age = age;
        this.gpa = gpa;
        this.isEnrolled = true;
    }
    
    // 接下來我們可以建立其他的constructor
    Student(){ // 沒有參數的constructor
        this.name = "Unknown";
        this.age = 0;
        this.gpa = 0.0;
        this.inEnrolled = false;
    }
    
    // 只知道名稱的constructor
    Student(String name){
        this.name = name;
        this.age = 0;
        this.gpa = 0.0;
        this.isEnrolled = false;
    }
    
    // 以及其他任何可能想到的組合都可以
}

物件陣列

與一般資料型態(例如int)的宣告其實沒有差很多,只是改成了指定的物件,用法也一樣

//一樣使用上面的Student的class

Student[] students = {new Student("A", 15, 4.0),
                      new Student("B", 18, 3.2),
                      new Student("C", 22, 3.5)};

for(Student student : students){
    student.showData();
}

static

使同一個物件的成員有共用的資料內容
static關鍵字可以讓被宣告的內容隸屬於class本身而非object
用途是如果每一個object都在共同使用同一個class中的資料,可以減少記憶體的消耗,並方便共同管理、調整


結語

今天是接觸Java OOP的第一天,了解到如何建構自己的class,以及如何初始化,並結合應用到自己的程式裡面。
今天也是快樂學習的一天,明天繼續!/images/emoticon/emoticon07.gif


上一篇
Day 5:Java基本語法(四)
下一篇
Day 7:Java OOP基礎(二)
系列文
30天從基礎學起Java,直到做出我的第一個遊戲21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言